﻿using System;
using TheOutLetLibrary.Dominio;
using System.Data.OleDb;

namespace TheOutLetLibrary.Infraestrutura {

    public class AccessProdutoDAO: IProdutoDAO {

        private OleDbTransaction transacao;

        public OleDbTransaction Transacao {
            set { transacao = value; }
        }

        public void IncluiProduto(Produto produto) {
            throw new NotImplementedException();
        }

        public void AlteraProduto(Produto produto) {
            throw new NotImplementedException();
        }

        public void ExcluiProduto(Produto produto) {
            throw new NotImplementedException();
        }

        public int AcheOuInclua(Produto produto) {
            OleDbCommand comando = new OleDbCommand();
            comando.CommandText =
                "SELECT * FROM tb_produto " +
                "WHERE XID_EMPRESA = @XID_EMPRESA AND CD_MODELO_MARCA = @CD_MODELO_MARCA";
            comando.Parameters.Add("XID_EMPRESA", OleDbType.Integer).Value = produto.XID_EMPRESA;
            comando.Parameters.Add("@CD_MODELO_MARCA", OleDbType.VarChar).Value = produto.CD_MODELO_MARCA;
            comando.Connection = transacao.Connection;
            comando.Transaction = transacao;
            OleDbDataReader reader = comando.ExecuteReader();
            if(!reader.HasRows) {
                comando = new OleDbCommand();
                comando.CommandText =
                    "INSERT INTO tb_produto (XID_EMPRESA, CD_MODELO_MARCA, DSC_MODELO_MARCA, " +
                    " DSC_MODELO_TOTLET, NCM, CFOP, PRECO_CONSIGNADO , PRECO_POR) " +
                    " VALUES (@XID_EMPRESA, @CD_MODELO_MARCA, @DSC_MODELO_MARCA, " +
                    " @DSC_MODELO_TOTLET, @NCM, @CFOP, @PRECO_CONSIGNADO, @PRECO_POR)";
                comando.Parameters.Add("@XID_EMPRESA", OleDbType.Integer).Value = produto.XID_EMPRESA;
                comando.Parameters.Add("@CD_MODELO_MARCA", OleDbType.VarChar).Value = produto.CD_MODELO_MARCA;
                comando.Parameters.Add("@DSC_MODELO_MARCA", OleDbType.VarChar).Value = produto.DSC_MODELO_MARCA;
                comando.Parameters.Add("@DSC_MODELO_TOTLET", OleDbType.VarChar).Value = produto.DSC_MODELO_TOTLET;
                comando.Parameters.Add("@NCM", OleDbType.VarChar).Value = produto.NCM;
                comando.Parameters.Add("@CFOP", OleDbType.VarChar).Value = produto.CFOP;
                comando.Parameters.Add("@PRECO_CONSIGNADO", OleDbType.Currency).Value = produto.PRECO_CONSIGNADO;
                comando.Parameters.Add("@PRECO_POR", OleDbType.Currency).Value = produto.PRECO_POR;
                comando.Transaction = transacao;
                comando.Connection = transacao.Connection;
                comando.ExecuteNonQuery();
                comando.CommandText = "SELECT @@IDENTITY";
                return Convert.ToInt32(comando.ExecuteScalar());
            } else {
                reader.Read();
                return reader.GetInt32(0);
            }
        }

    }

}
